package _动态规划系列._四键键盘;

/**
 * @Author: 吕庆龙
 * @Date: 2020/4/2 16:46
 * <p>
 * 功能描述:
 */
public class Summary_0651 {

    public static void main(String[] args) {
        Summary_0651 test = new Summary_0651();
        int result = test.maxA(15);
        System.out.println(result);
    }
    /**
     * 经过测试 当N=15时  进行的操作大致是 A A A ... C-A C-C C-V C-V...  C-A C-C C-V C-V....
     * 我想说明的是并不是C-A  C-C 只有一次的时候才是最大，当N足够大的时候
     * 1.先A几次，再C-A C-C  然后接着C-V几次
     * 2.到某个点的时候再C-A C-C  才能达到最大。(debug出来的)
     *
     * 定义：dp[i] 表示 i 次操作后最多能显示多少个 A
     */
    public int maxA(int N) {
        int[] dp = new int[N + 1];
        dp[0] = 0;
        for (int i = 1; i <= N; i++) {
            // 按 A 键
            dp[i] = dp[i - 1] + 1;
            for (int j = 2; j < i; j++) {
                // 全选 & 复制 dp[j-2]，连续粘贴 i - j 次
                // 屏幕上共 dp[j - 2] * (i - j + 1) 个 A
                dp[i] = Math.max(dp[i], dp[j - 2] * (i - j + 1));
            }
        }
        // N 次按键之后最多有几个 A？
        return dp[N];
    }
}
